package com.ydj.framework.redis;

/**
 * 分布式锁工具
 *
 * @author wangsc
 * @time 2018年11月5日下午7:34:02
 */
interface DistributedLockHandler {
    /**
     * 尝试获取分布式锁 <br>
     * 锁的超时时间、尝试频率等使用默认配置
     *
     * @param lock 锁的名称
     * @return true 获取成功，false获取失败
     */
    public boolean tryLock(DistributedLock lock);

    /*    *//**
     * 尝试获取分布式锁
     *
     * @param lock    锁的名称
     * @param timeout 获取超时时间 单位ms
     * @return true 获取成功，false获取失败
     *//*
    public boolean tryLock(DistributedLock lock, long timeout);*/

    /**
     * 释放分布式锁
     *
     * @param lock 锁对象
     */
    public void releaseLock(DistributedLock lock);

    /**
     * 获取分布式锁plus
     *
     * @param key
     * @param value
     * @param expire
     * @return
     */
    public boolean tryLock(String key, String value, long expire);

    /**
     * 释放分布式锁plus
     *
     * @param key
     * @param value
     * @return
     */
    public boolean releaseLock(String key, String value);

    /**
     * 尝试获取锁 真实方法
     *
     * @param key
     * @param value
     * @param expire
     * @param retryTimes
     * @param sleepMillis
     * @return
     */
    public boolean tryLock(String key, String value, long expire, int retryTimes, long sleepMillis);
}